Micron Document
πŸŽ–οΈGitΠ―Ρ€Π°πŸŽ–οΈ


Displaying Rendered β€’ View raw β€’ Download

specs/20260507-161758-node-list-layout/quickstart.md bd2863243bab6eb213401d949839a2bc74dde7e2 (bd286324) Text, 3.54 KB

Quickstart β€” Node List Layout

Purpose

This guide helps a Meshtastic-Android contributor bootstrap, navigate, test, and debug the Node List Layout feature.

Prerequisites

β€’ JDK 21
β€’ Android SDK installed and T383838ANDROID_HOME available to Gradle
β€’ Git submodule initialized for T383838core/proto
β€’ A working T383838local.properties file (copy from T383838secrets.defaults.properties if needed)

Workspace Bootstrap

T282828
git submodule update --init
Tff7b72[ -f local.properties Tff7b72] Tff7b72|| cp secrets.defaults.properties local.properties


Feature Access Path

Once implemented, the feature is accessible at:

β€’ Settings UI: Settings > App Settings > Node Layout
β€’ Node List: The Nodes tab renders rows based on the selected density

No new navigation routes or deep links are required.

Key Files

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ File β”‚ Purpose β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ T383838feature/node/src/commonMain/.../model/NodeList… β”‚ T383838COMPLETE / T383838COMPACT enum β”‚
β”‚ T383838feature/node/src/commonMain/.../component/Node… β”‚ Complete row composable (existing, refactored) β”‚
β”‚ T383838feature/node/src/commonMain/.../component/Node… β”‚ Compact row composable (new) β”‚
β”‚ T383838feature/node/src/commonMain/.../component/Node… β”‚ Help bottom sheet (new) β”‚
β”‚ T383838feature/node/src/commonMain/.../list/NodeListS… β”‚ Density-aware list delegation β”‚
β”‚ T383838feature/node/src/commonMain/.../list/NodeListV… β”‚ Exposes density + toggle state β”‚
β”‚ T383838feature/node/src/commonMain/.../list/NodeFilte… β”‚ Layout preference integration β”‚
β”‚ T383838core/prefs/src/commonMain/.../ui/UiPrefsImpl.kt β”‚ DataStore preference keys β”‚
β”‚ T383838feature/settings/src/commonMain/.../NodeLayout… β”‚ Settings section UI (new) β”‚
β”‚ T383838core/resources/src/commonMain/composeResources… β”‚ Toggle labels, help text β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Test Commands

Run feature module tests (KMP)

T282828
./gradlew :feature:node:allTests
./gradlew :feature:settings:allTests

Run core prefs tests

T282828
./gradlew :core:prefs:allTests

Full verification

T282828
./gradlew spotlessApply detekt assembleDebug Tffa657test allTests


Compile-only check (fast)

T282828
./gradlew :feature:node:compileKotlinJvm :feature:settings:compileKotlinJvm

Development Workflow

1. Start with preferences β€” add DataStore keys in T383838UiPrefsImpl.kt and verify defaults with a unit test.
2. Build the compact composable β€” create T383838NodeItemCompact.kt with hardcoded toggles first, then wire to DataStore.
3. Wire the list β€” modify T383838NodeListScreen.kt to switch between T383838NodeItem and T383838NodeItemCompact.
4. Build settings UI β€” create T383838NodeLayoutSettings.kt with the picker, toggles, and live preview.
5. Add the help sheet β€” create T383838NodeListHelp.kt with signal strength documentation.
6. Test β€” run T383838allTests for both T383838feature:node and T383838feature:settings.

Debugging Tips

β€’ Toggle not persisting: Check that the DataStore key string matches T383838NodeListLayoutPreferences enum value exactly.
β€’ Chip size wrong: Verify T383838lineCount derivation β€” it counts toggle state, not data presence.
β€’ Live preview empty: The preview requires at least one node in the Room database. Connect to a radio or use test fixtures.
β€’ LazyColumn jank: Ensure stable T383838key parameters are set on T383838LazyColumn items. Profile with Layout Inspector if needed.

Logging

This feature does not require custom logging beyond standard Compose recomposition debugging. Use Android Studio Layout Inspector to diagnose rendering issues.

Served by rngit 1.5.0 - Generated in 0.04s